package com.qfedu.controller;

import com.qfedu.pojo.req.UserReq;
import com.qfedu.pojo.resp.BaseResp;
import com.qfedu.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("user")
@Api(tags = "前台用户管理")
//@CrossOrigin(allowCredentials = "true", origins = "*")
public class UserController {
    @Autowired
    UserService userService;

    /**
     * 发送邮件的方法
     * @param userReq   前台传入的user(用户)的json对象
     * @param session   后端需要使用session存储数据，无需前台传入
     * @return  统一返回json信息，包括状态码，提示信息，返回的数据，分页总条数为空(前台不关注)
     */
    @PostMapping("sendMail")
    public BaseResp sendMail(@RequestBody UserReq userReq, HttpSession session) {
        return userService.sendMail(userReq.getEmail(), session);
    }

    /**
     * 注册的方法
     * @param userReq   前台传入的user(用户)的json对象
     * @param session   后端需要使用session存储数据，无需前台传入
     * @return  统一返回json信息，包括状态码，提示信息，返回的数据，分页总条数为空(前台不关注)
     */
    @PostMapping("regist")
    public BaseResp regist(@RequestBody UserReq userReq, HttpSession session) {
        return userService.regist(userReq, session);
    }

    /**
     * 登录的方法
     * @param userReq   前台传入的user(用户)的json对象
     * @return  统一返回json信息，包括状态码，提示信息，返回的数据，分页总条数为空(前台不关注)
     */
    @PostMapping("login")
    public BaseResp login(@RequestBody UserReq userReq) {
        return userService.login(userReq);
    }

    /**
     * 判断用户是否已登录的方法
     * @return success/error
     */
    @PostMapping("isAuthenticated")
    public BaseResp isAuthenticated() {
        return userService.isAuthenticated();
    }

    @RequiresPermissions("SelectUser")
    @GetMapping("findAllUser")
    /**
     * @RequestBody Integer page, Integer size  page, size
     */
    public BaseResp findAllUser(@RequestParam("page")Integer page, @RequestParam("size")Integer size) {
        return userService.findAllUser(page, size);
    }

    @RequiresPermissions("UpdateUser")
    @PostMapping("updUser")
    public BaseResp updUser(@RequestBody UserReq userReq) {
        return userService.updUser(userReq);
    }

    @RequiresPermissions("UpdateUser")
    @PostMapping("delUser")
    public BaseResp delUser(@RequestBody UserReq userReq) {
        return userService.delUser(userReq);
    }

}
